<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Util
 *
 * @author CleitonM
 */
class Util
{
  /*
   * 
      $interval pode receber:
      y - Numero de anos absolutos, calcula apenas a subtração dos anos de forma absoluta
      Y - Numero de anos cheios, calcula levando em conta anos e dias para verificar se passou-se um ano
      m - Numero de meses absolutos (01/01/1970 a 01/03/1970 = 2 meses)
      M - Numero de meses cheios (01/01/1970 a 01/03/1970 = 1 mês, porque fevereiro tem 28 dias)
      d - Numero de dias  
      h - Numero de horas 
      n - Numero de minutos 
      s - Numero de segundos (default)
   */
 
  static public function datediff($interval, $datefrom, $dateto, $using_timestamps = false) {
 
    if (!$using_timestamps) {
      $datefrom = strtotime($datefrom, 0);
      $dateto = strtotime($dateto, 0);
    }
    $difference = $dateto - $datefrom; // Difference in seconds
 
    switch($interval) {
      case "y": // Numero de anos absolutos
        $tempFrom = getdate($datefrom);
        $tempTo = getdate($dateto);
        $datediff = $tempTo['year']-$tempFrom['year'];
        break;
      case 'Y': // Numero de anos cheios 
        $years_difference = floor($difference / 31536000);
        if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom)+$years_difference) > $dateto) {
          $years_difference--;
        }
        if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto)-($years_difference+1)) > $datefrom) {
          $years_difference++;
        }
        $datediff = $years_difference;
        break;
      case "m": // Numero de meses absolutos 
        $tempFrom = getdate($datefrom);
        $tempTo = getdate($dateto);
        $datediff = ($tempTo['mon']-$tempFrom['mon']) + ($tempTo['year']-$tempFrom['year'])*12;
        break;
      case "M": // Numero de meses cheios
        $months_difference = floor($difference / 2678400);
        while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
          $months_difference++;
        }
        $months_difference--;
        $datediff = $months_difference;
        break;
      case "d": // Numero de dias cheios
        $datediff = floor($difference / 86400);
        break;
      case "h": // Numero de horas
        $datediff = floor($difference / 3600);
        break;
      case "n": // Numero de minutos
        $datediff = floor($difference / 60);
        break;
      default: // Numero de segundos (default)
        $datediff = $difference;
        break;
    }
    return $datediff;
  } 
}

?>
